logo

Introducción

En esta demostración se resumen los pasos de un análisis de datos aplicado a un conjunto de datos obtenidos del repositorio de aprendizaje automático de la UCI (University of California, Irvine), enlace aqui en el que se adquieren los datos de una planta de propulsión de un barco tipo fragata. Los datos disponibles fueron tomados en estado estable de la planta.

El objetivo del ejercicio es construir un modelo que permita determinar el grado de degradación del sistema de compresión de la planta a partir de los datos disponibles.

Conjunto de datos

Los datos están en formato .csv en una tabla con 18 columnas y 11934 filas, donde las columnas son variables y las filas son observaciones. Las variables son definidas como:

  • Posición de la palanca (lp) [ ]
  • Velocidad de la nave (v) [knots]
  • Torque en el eje de la turbina de gas (GTT) [kN m]
  • Rata de revoluciones de la turbina (GTn) [rpm]
  • Rata de revoluciones del generador (GGn) [rpm]
  • Torque hélice de estribor (Ts) [kN]
  • Torque hélice de puerto (Tp) [kN]
  • Temperatura en la salida de alta presión en la turbina (T48) [C]
  • Temperatura del aire en la entrada del compresor (T1) [C]
  • Temperatura del aire en la salida del compresor (T2) [C]
  • Presión en la salida de la turbina (P48) [bar]
  • Presión de aire en la entrada del compresor (P1) [bar]
  • Presión de aire en la salida del compresor (P2) [bar]
  • Presión de exosto de gas en la turbina (Pexh) [bar]
  • Control de inyección en la turbina (TIC) [%]
  • Flujo de combustible (mf) [kg/s]
  • Coeficiente de estado de degradación del compresor
  • Coeficiente de estado de degradación de la turbina

Para este caso, la variable Coeficiente de estado de degradación del compresor sera la variable dependiente sobre la que se van a realizar las predicciones (es la variable de salida del modelo) las demás variables serán independientes o regresores (variables de entrada al modelo).

Exploración de los datos

En esta fase se analizan los datos por medio de gráficas y estudio de métricas estadísticas para entender las diferentes relaciones entre las variables, este análisis es importante para:

  • El tipo de interacciones entre las variables (relaciones lineales, no lineales, etc)
  • Determinar las variables mas relevantes para la construcción del modelo
  • Preseleccionar las estrategias mas adecuadas para la construcción del modelo

El análisis exploratorio se realizó en las siguientes fases:

Depuración de los datos

Los datos son depurados de forma que solo queden los que tienen el potencial de aportar información para la construcción del modelo, se eliminan las variables vacías o aquellas con datos nulos, así mismo se eliminan las que tienen varianzas cercanas a cero (es decir, aquellas en las que todos sus valores son iguales):

Tabla 1: Conjunto de datos completo

Variables que tienen varianza cerca de cero:

[1] "Comp_in_temp"  "Comp_in_press"

Las cuales son eliminadas del conjunto de datos.

Graficas Exploratorias

Haga click en cada “tab” para ver las gráficas

Graficas de datos completos

Los datos son explorados ahora observando gráficas que representan las relaciones entre la distintas variables:

DEGRADACIÓN DEL COMPRESOR: Se observa el comportamiento de coeficiente de decaimiento del compresor versus las revoluciones por minuto de la turbina

DEGRADACIÓN DEL COMPRESOR: Se observa el comportamiento de coeficiente de decaimiento del compresor versus las revoluciones por minuto de la turbina

De la anterior grafica se puede observar que los datos están fuertemente relacionados con la posición de la palanca, esto se repite en todas las variables del conjunto de datos:

DEGRADACIÓN DEL COMPRESOR: Se observa el comportamiento de coeficiente de decaimiento del compresor versus diferentes variables

DEGRADACIÓN DEL COMPRESOR: Se observa el comportamiento de coeficiente de decaimiento del compresor versus diferentes variables

Conclusión: Se deben estudiar los datos segregados por cada posición de la palanca de mando.

Relaciones no lineales

Estudiando el conjunto de datos segregado por cada posición de la palanca de mando se encuentran relaciones no lineales, en este caso se muestran algunas relación para el conjunto de datos que corresponde a la primera posición de la palanca de mando (1.138):

Graficas del comportamiento de algunas de las variables, el nombre en la columna corresponde a la variable independiente, mientras que el nombre en la fila corresponde a la variable dependiente

Graficas del comportamiento de algunas de las variables, el nombre en la columna corresponde a la variable independiente, mientras que el nombre en la fila corresponde a la variable dependiente

Conclusión: Se deben estudiar modelos que puedan captar relaciones no lineales.

Relaciones lineales

Así mismo, se tienen relaciones lineales entre variables:

Graficas del comportamiento de algunas de las variables, el nombre en la columna corresponde a la variable independiente, mientras que el nombre en la fila corresponde a la variable dependiente

Graficas del comportamiento de algunas de las variables, el nombre en la columna corresponde a la variable independiente, mientras que el nombre en la fila corresponde a la variable dependiente

Conclusión: Debe tenerse en cuenta que tantas variables con relaciones lineales son superfluas y añaden complejidad innecesaria al modelo, dado que su correlación es alta se debe proponer la eliminación de alguna de estas variables.

Selección de Variables

En las anteriores secciones se ha encontrado que hay la posibilidad de que muchas variables tengan fuertes relaciones lineales entre si, esta interdependencia es contraproducente porque aumenta la complejidad del modelo pero no aporta información relevante, se hace un análisis estadístico para identificar las variables mas relevantes.

Tabla 2: Factor de inflación de varianza, conjunto de datos completo

Las variables mas correlacionadas tienen los valores mas altos porque aportan mas variabilidad, las cuales son candidatas a ser eliminadas del modelo
Variabilidad
GT_shft_trq 2020
GT_rpm 12313
Gen_rpm 222
S_prop_trq 12629
Turbine_temp 17121
Comp_out_temp 2330
Turbine_press 5608
Comp_out_press 12953
Turb_inj_cnt 155
Fuel_flow 11720

Se consideran que valores por encima de 10 o 20 pueden ser problemáticos, en este caso se tienen variables con valores de hasta 17000. Después de la selección se obtiene:

Tabla 3: Factor de inflación de varianza, conjunto de datos parcial

Después de la selección se observan valores de variabilidad menores a los originales, las variables aquí listadas son usadas para construir el modelo final
Variabilidad
GT_rpm 9
Gen_rpm 2
Comp_out_temp 16
Turbine_press 15
Turb_inj_cnt 9

Construcción del modelo

Segregación de datos

Los modelos se entrenarán usando las variables seleccionadas. Para poder medir el desempeño real de los modelos, los datos se dividen en dos partes, el 75% de los datos se usan para el entrenamiento de los modelos, mientras que el 25% restante se usa para observar el comportamiento de estos frente a datos que no son conocidos.

NOTA 1: Hay que tener en cuenta que los datos usados fueron segregados previamente en el análisis de gráficas exploratorias, en donde se determino que los datos se iban a separar según la posición de la palanca de mando, por esta razón, aunque el conjunto de datos original tiene cerca de 12000 observaciones, los datos que estamos usando son solo 1326 que corresponden a la primera posición de la palanca. En ese mismo sentido se debe tener en cuenta que para las otras posiciones se deben entrenar modelos distintos con sus respectivos datos.

Esta segregación se realiza haciendo muestreos aleatorios de las observaciones, la segregación se ilustra en las tablas a continuación:

Hacer click en cada Tab

Conjunto de datos completo (Nota 1)

Conjunto de entrenamiento

Después de la segregación se tiene:

Conjunto de prueba

Entrenamiento

Con el conjunto de datos de entrenamiento se entrenan cuatro modelos distintos con grados de complejidad diferentes:

Modelo lineal


Call:
lm(formula = Comp_decay ~ GT_rpm + Gen_rpm + Comp_out_temp + 
    Turbine_press + Turb_inj_cnt, data = df1_tr)

Residuals:
       Min         1Q     Median         3Q        Max 
-1.710e-03 -3.816e-04  1.395e-05  3.669e-04  2.010e-03 

Coefficients:
                Estimate Std. Error t value Pr(>|t|)    
(Intercept)    3.188e+00  3.941e-03  808.77   <2e-16 ***
GT_rpm         1.577e-04  1.806e-06   87.30   <2e-16 ***
Gen_rpm       -1.777e-04  6.834e-07 -260.08   <2e-16 ***
Comp_out_temp -3.107e-03  7.763e-06 -400.30   <2e-16 ***
Turbine_press  4.078e-01  1.034e-03  394.35   <2e-16 ***
Turb_inj_cnt   2.324e-04  5.279e-06   44.02   <2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.0005879 on 990 degrees of freedom
Multiple R-squared:  0.9984,    Adjusted R-squared:  0.9984 
F-statistic: 1.265e+05 on 5 and 990 DF,  p-value: < 2.2e-16

Modelo No lineal #1


Call:
lm(formula = lm(Comp_decay ~ ns(GT_rpm, 3) + ns(Gen_rpm, 3) + 
    ns(Comp_out_temp, 3) + ns(Turbine_press, 3) + Turb_inj_cnt, 
    data = df1_tr))

Residuals:
       Min         1Q     Median         3Q        Max 
-0.0007519 -0.0001560  0.0000006  0.0001619  0.0008328 

Coefficients:
                        Estimate Std. Error  t value Pr(>|t|)    
(Intercept)            9.923e-01  1.886e-04 5262.383  < 2e-16 ***
ns(GT_rpm, 3)1         5.519e-03  2.268e-04   24.338  < 2e-16 ***
ns(GT_rpm, 3)2         1.093e-02  3.593e-04   30.427  < 2e-16 ***
ns(GT_rpm, 3)3         7.457e-03  2.166e-04   34.429  < 2e-16 ***
ns(Gen_rpm, 3)1       -1.597e-02  6.112e-05 -261.302  < 2e-16 ***
ns(Gen_rpm, 3)2       -3.360e-02  1.583e-04 -212.259  < 2e-16 ***
ns(Gen_rpm, 3)3       -2.501e-02  6.927e-05 -360.997  < 2e-16 ***
ns(Comp_out_temp, 3)1 -6.653e-02  9.104e-05 -730.836  < 2e-16 ***
ns(Comp_out_temp, 3)2 -1.380e-01  1.863e-04 -740.760  < 2e-16 ***
ns(Comp_out_temp, 3)3 -1.043e-01  1.267e-04 -823.456  < 2e-16 ***
ns(Turbine_press, 3)1  5.715e-02  1.081e-04  528.688  < 2e-16 ***
ns(Turbine_press, 3)2  1.169e-01  1.939e-04  602.970  < 2e-16 ***
ns(Turbine_press, 3)3  8.054e-02  1.033e-04  779.433  < 2e-16 ***
Turb_inj_cnt           3.718e-05  7.849e-06    4.738 2.48e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.0002419 on 982 degrees of freedom
Multiple R-squared:  0.9997,    Adjusted R-squared:  0.9997 
F-statistic: 2.878e+05 on 13 and 982 DF,  p-value: < 2.2e-16

Modelo No lineal #2


Call:
lm(formula = lm(Comp_decay ~ ns(GT_rpm, 4) + ns(Gen_rpm, 4) + 
    ns(Comp_out_temp, 4) + ns(Turbine_press, 4) + Turb_inj_cnt, 
    data = df1_tr))

Residuals:
       Min         1Q     Median         3Q        Max 
-7.234e-04 -1.581e-04  1.039e-05  1.620e-04  8.447e-04 

Coefficients:
                        Estimate Std. Error  t value Pr(>|t|)    
(Intercept)            9.922e-01  2.022e-04 4906.207  < 2e-16 ***
ns(GT_rpm, 4)1         4.961e-03  2.182e-04   22.736  < 2e-16 ***
ns(GT_rpm, 4)2         6.396e-03  2.558e-04   25.002  < 2e-16 ***
ns(GT_rpm, 4)3         1.058e-02  3.531e-04   29.967  < 2e-16 ***
ns(GT_rpm, 4)4         8.104e-03  2.722e-04   29.773  < 2e-16 ***
ns(Gen_rpm, 4)1       -1.386e-02  8.090e-05 -171.260  < 2e-16 ***
ns(Gen_rpm, 4)2       -1.827e-02  7.346e-05 -248.733  < 2e-16 ***
ns(Gen_rpm, 4)3       -3.272e-02  1.682e-04 -194.492  < 2e-16 ***
ns(Gen_rpm, 4)4       -2.605e-02  8.080e-05 -322.419  < 2e-16 ***
ns(Comp_out_temp, 4)1 -5.633e-02  9.097e-05 -619.218  < 2e-16 ***
ns(Comp_out_temp, 4)2 -7.719e-02  1.049e-04 -736.167  < 2e-16 ***
ns(Comp_out_temp, 4)3 -1.351e-01  1.969e-04 -686.161  < 2e-16 ***
ns(Comp_out_temp, 4)4 -1.083e-01  1.343e-04 -806.088  < 2e-16 ***
ns(Turbine_press, 4)1  4.950e-02  1.273e-04  388.992  < 2e-16 ***
ns(Turbine_press, 4)2  6.701e-02  1.132e-04  591.783  < 2e-16 ***
ns(Turbine_press, 4)3  1.120e-01  1.963e-04  570.628  < 2e-16 ***
ns(Turbine_press, 4)4  8.570e-02  1.057e-04  810.631  < 2e-16 ***
Turb_inj_cnt           4.271e-05  8.887e-06    4.806 1.78e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.0002369 on 978 degrees of freedom
Multiple R-squared:  0.9997,    Adjusted R-squared:  0.9997 
F-statistic: 2.294e+05 on 17 and 978 DF,  p-value: < 2.2e-16

Modelo No lineal #3


Call:
lm(formula = lm(Comp_decay ~ ns(GT_rpm, 5) + ns(Gen_rpm, 5) + 
    ns(Comp_out_temp, 5) + ns(Turbine_press, 5) + Turb_inj_cnt, 
    data = df1_tr))

Residuals:
       Min         1Q     Median         3Q        Max 
-7.364e-04 -1.553e-04  8.890e-06  1.610e-04  8.662e-04 

Coefficients:
                        Estimate Std. Error  t value Pr(>|t|)    
(Intercept)            9.922e-01  2.013e-04 4928.257  < 2e-16 ***
ns(GT_rpm, 5)1         4.151e-03  1.713e-04   24.234  < 2e-16 ***
ns(GT_rpm, 5)2         5.917e-03  2.516e-04   23.520  < 2e-16 ***
ns(GT_rpm, 5)3         7.214e-03  2.694e-04   26.778  < 2e-16 ***
ns(GT_rpm, 5)4         1.046e-02  3.432e-04   30.482  < 2e-16 ***
ns(GT_rpm, 5)5         8.427e-03  2.853e-04   29.540  < 2e-16 ***
ns(Gen_rpm, 5)1       -1.145e-02  8.992e-05 -127.379  < 2e-16 ***
ns(Gen_rpm, 5)2       -1.581e-02  9.101e-05 -173.669  < 2e-16 ***
ns(Gen_rpm, 5)3       -1.998e-02  8.768e-05 -227.834  < 2e-16 ***
ns(Gen_rpm, 5)4       -3.192e-02  1.715e-04 -186.190  < 2e-16 ***
ns(Gen_rpm, 5)5       -2.683e-02  8.707e-05 -308.097  < 2e-16 ***
ns(Comp_out_temp, 5)1 -4.708e-02  8.924e-05 -527.584  < 2e-16 ***
ns(Comp_out_temp, 5)2 -6.589e-02  1.108e-04 -594.564  < 2e-16 ***
ns(Comp_out_temp, 5)3 -8.338e-02  1.106e-04 -754.229  < 2e-16 ***
ns(Comp_out_temp, 5)4 -1.334e-01  2.058e-04 -648.039  < 2e-16 ***
ns(Comp_out_temp, 5)5 -1.104e-01  1.371e-04 -805.040  < 2e-16 ***
ns(Turbine_press, 5)1  4.003e-02  1.240e-04  322.818  < 2e-16 ***
ns(Turbine_press, 5)2  5.909e-02  1.455e-04  406.233  < 2e-16 ***
ns(Turbine_press, 5)3  7.245e-02  1.212e-04  597.897  < 2e-16 ***
ns(Turbine_press, 5)4  1.090e-01  1.996e-04  546.147  < 2e-16 ***
ns(Turbine_press, 5)5  8.847e-02  1.091e-04  810.719  < 2e-16 ***
Turb_inj_cnt           4.604e-05  8.968e-06    5.133 3.44e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.000236 on 974 degrees of freedom
Multiple R-squared:  0.9998,    Adjusted R-squared:  0.9997 
F-statistic: 1.871e+05 on 21 and 974 DF,  p-value: < 2.2e-16

Medición de desempeño

Selección de complejidad

Se hace una comparación en la relevancia del aumento de complejidad del modelo versus la disminución del error de las predicciones:

En la columna Pr(>F) se tiene una medición de la significancia de la disminución del error de predicción entre dos modelos, entre menor el numero mayor la significancia
Res.Df RSS Df Sum of Sq F Pr(>F)
990 0.0003421 NA NA NA NA
982 0.0000575 8 0.0002847 638.730715 0.0000000
978 0.0000549 4 0.0000026 11.515458 0.0000000
974 0.0000543 4 0.0000006 2.805084 0.0247432

Se puede observar que el ultimo modelo (modelo No lineal #3) no representa un aumento significativo en la disminución del error (el Pr(>F) es aproximadamente igual a 0.05 o mayor), por lo que la complejidad del modelo no se requiere aumentar mas allá de lo definido en el Modelo No lineal #2.

Comparación de las predicciones

Errores de predicción

Se observa la disminucion en el error de prediccion a medida que se aumenta la complejidad del modelo, observese sin embargo, que lo anterior no es cierto para el modelo no lineal #3
x
mdl_l 3.51e-05
mdl_nl1 6.00e-06
mdl_nl2 5.70e-06
mdl_nl3 5.80e-06

El fenómeno por el cual modelos mas complejos llevan a errores de predicción mas grandes se conoce como overfitting, y se debe a que los modelos complejos tienden a imitar los valores del conjunto de datos de entrenamiento de forma mas exacta, pero de paso aumenta el comportamiento errático de la función que describe los datos de entrenamiento. Lo anterior deriva en que cuando se van a hacer predicciones de datos que no se conocen el modelo presenta mayor error de predicción.

Conclusiones

El modelo no lineal # 2 es el que mejor comportamiento presenta para la predicción del comportamiento del sistema del cual se han obtenido los datos.

Esta conclusión se ha obtenido después de:

  • Selección de un objetivo para el análisis: la información que subyace en un conjunto de datos es muy amplia y puede servir para muchas cosas distintas, se requiere delimitar el objeto de estudio para poder:
    • Valorar si la calidad y la cantidad de datos es suficiente para conseguir el objetivo
    • Determinar si las variables contenidas en el conjunto de datos son las adecuadas para conseguir el objetivo
  • Análisis exploratorio de datos en los que por medio de gráficas y mediciones estadísticas se determinan las características mas relevantes que el modelo debe tener.
  • Análisis estadístico (Inferencia), donde se verifican las hipótesis establecidas en el análisis exploratorio y se hace la selección de las variables mas adecuadas para la construcción del modelo.
  • Entrenamiento y medición de desempeño de diferentes modelos candidatos para la predicción de datos.

El paso final es la selección del modelo final e implementación.